package x.ovo.wechat.bot.common.event;

import lombok.NonNull;
import x.ovo.wechat.bot.common.Manager;
import x.ovo.wechat.bot.common.plugin.Plugin;

/**
 * 事件管理器
 *
 * @author ovo, created by 2024/05/01
 */
public interface EventManager extends Manager {

    /**
     * 注册插件事件监听器
     *
     * @param plugin   插件
     * @param listener 监听器
     */
    void register(@NonNull Plugin plugin, EventListener<? extends Event<?>> listener);

    /**
     * 卸载插件事件监听器
     *
     * @param plugin 插件
     */
    void unregister(@NonNull Plugin plugin);

    /**
     * 异步调用事件
     *
     * @param event 事件
     */
    void callEvent(@NonNull Event<?> event);
}
